package model

import (
	"github.com/go-gin-admin/global"
	"github.com/jinzhu/gorm"
)

// 角色菜单表
type RoleMenu struct {
	Id       int64  `json:"id" gorm:"primary_key"`       // 主键
	RoleId   int64  `json:"roleId"`   // 角色id
	MenuId   int64  `json:"menuId"`   // 菜单id
	RoleName string `json:"roleName"` // 角色名称
}

type UserRole struct {
	Id int64 `json:"id" gorm:"primary_key"` // 主键
	UserId int64 `json:"userId"` // 用户id
	RoleId int64 `json:"roleId"` // 角色id
}

// 根据角色id获取角色所有菜单
func (r *RoleMenu) GetMenuIds(roleId int64) ([]int64, error) {
	var roleMenus []int64
	 err := global.GDB.Raw("SELECT sm.menu_id as id FROM sys_menu sm LEFT JOIN sys_role_menu srm ON sm.menu_id = srm.menu_id WHERE srm.role_id = ? AND (sm.menu_id NOT IN (SELECT sys_menu.parent_id FROM sys_role_menu  LEFT JOIN sys_menu ON sys_menu.menu_id = sys_role_menu.menu_id WHERE sys_role_menu.role_id = ?))", roleId, roleId).Pluck("id", &roleMenus).Error
	if  err != nil {
		return roleMenus,  err
	}
	return roleMenus, nil
}

// 通过用户id获取用户的角色id切片
func (r *RoleMenu) GetRoleIdsByUserId(userId int64) ([]int64, error)  {
	roleIds := make([]int64, 0)
	var userRole []UserRole
	table := global.GDB.Table("sys_user_role")
	table = table.Where("user_id = ?", userId)
	if err := table.Find(&userRole).Find(&userRole).Error; err != nil {
		// 判断错误
		switch {
		case err == gorm.ErrRecordNotFound:
			// 说明没有找到
			return nil, nil
		case err != nil:
			return nil, err
		}
	}

	// 循环出所有的角色id
	for i := 0; i < len(userRole); i++ {
		roleIds = append(roleIds, userRole[i].RoleId)
	}
	return roleIds, nil
}
